package br.com.bacabeleireiros.sysbeleza.controller;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;

import org.primefaces.event.DragDropEvent;

import br.com.bacabeleireiros.sysbeleza.entity.Produto;
import br.com.bacabeleireiros.sysbeleza.entity.Servico;
import br.com.bacabeleireiros.sysbeleza.entity.ServicoProduto;
import br.com.bacabeleireiros.sysbeleza.service.IProdutoService;
import br.com.bacabeleireiros.sysbeleza.service.IServicoProdutoService;
import br.com.bacabeleireiros.sysbeleza.service.IServicoService;
import br.com.bacabeleireiros.util.controller.BaseBean;

@ManagedBean(name = "cadastroServicoProdutoMB")
@ViewScoped
public class CadastroServicoProdutoMB extends BaseBean implements Serializable {

	private static final long serialVersionUID = 1L;
	private Servico servico;
	private String descricaoProduto = new String();
	private ServicoProduto servicoProduto;
	private List<Produto> listaProdutosSelecionados;
	private List<ServicoProduto> listaServicoProdutoSelecionados;
	
	@ManagedProperty("#{servicoService}")
	private IServicoService servicoService;	
	
	@ManagedProperty("#{produtoService}")
	private IProdutoService produtoService;	
	
	@ManagedProperty("#{servicoProdutoService}")
	private IServicoProdutoService servicoProdutoService;	

	public CadastroServicoProdutoMB() {
		servicoProduto = new ServicoProduto();
		listaProdutosSelecionados = new ArrayList<Produto>();
		listaServicoProdutoSelecionados = new ArrayList<ServicoProduto>();
	}
	
	@PostConstruct
	public void construct() {
		String id =  getFacesContext().getExternalContext().getRequestParameterMap().get("idServico");
		if (!"".equals(id) && !id.equals(null)) {
			servico = servicoService.getById(new Long(id));
		}
		
	}
	
	public void pesquisaProduto() {
		getListaProdutoDisponivel();
	}	
	
	public List<Produto> getListaProdutoDisponivel() {
		String texto = "";
		if (!getDescricaoProduto().equals("")) {
			texto = getDescricaoProduto();
		}
		return produtoService.getAllProdutoDisponivel(getServico().getIdServico(),texto);
	}	
	
	public List<ServicoProduto> getListaServicoProduto() {
		return servicoProdutoService.getAll(getServico().getIdServico());
	}
	
	public void adiciona() {
		List<Produto> lista = getListaProdutosSelecionados();
		for (Produto p : lista) {
			servicoProduto = new ServicoProduto();
			servicoProduto.setServico(getServico()); 
			servicoProduto.getProduto().setIdProduto(p.getIdProduto());
			servicoProduto = servicoProdutoService.salva(servicoProduto);
		}		
	}
	
	public void adicionaTodos() {
		List<Produto> lista = getListaProdutoDisponivel();
		for (Produto p : lista) {
			servicoProduto = new ServicoProduto();
			servicoProduto.setServico(getServico()); 
			servicoProduto.getProduto().setIdProduto(p.getIdProduto());
			servicoProduto = servicoProdutoService.salva(servicoProduto);
		}		
	}	
	
	public void adiciona1(DragDropEvent ddEvent) {
		Produto produto = (Produto) ddEvent.getData();
		servicoProduto = new ServicoProduto();
		servicoProduto.setServico(getServico()); 
		servicoProduto.getProduto().setIdProduto(produto.getIdProduto());
		servicoProduto = servicoProdutoService.salva(servicoProduto);        
	}	

	public void deleta() {
		List<ServicoProduto> lista = getListaServicoProdutoSelecionados();
		for (ServicoProduto c : lista) {
			servicoProdutoService.exclui(c);
		}
	}
	
	public void deletaTodos() {
		List<ServicoProduto> lista = getListaServicoProduto();
		for (ServicoProduto c : lista) {
			servicoProdutoService.exclui(c);
		}
	}	
	
	public void deleta1(DragDropEvent ddEvent) {
		ServicoProduto servicoProduto = (ServicoProduto) ddEvent.getData();
		servicoProdutoService.exclui(servicoProduto);
	}	
	
	// gets e sets

	public Servico getServico() {
		return servico;
	}

	public void setServico(Servico servico) {
		this.servico = servico;
	}

	public String getDescricaoProduto() {
		return descricaoProduto;
	}
	
	public void setServicoService(IServicoService servicoService) {
		this.servicoService = servicoService;
	}

	public void setDescricaoProduto(String descricaoProduto) {
		this.descricaoProduto = descricaoProduto;
	}

	public void setServicoProdutoService(
			IServicoProdutoService servicoProdutoService) {
		this.servicoProdutoService = servicoProdutoService;
	}
	
	public void setProdutoService(IProdutoService produtoService) {
		this.produtoService = produtoService;
	}

	public List<Produto> getListaProdutosSelecionados() {
		return listaProdutosSelecionados;
	}

	public void setListaProdutosSelecionados(List<Produto> listaProdutosSelecionados) {
		this.listaProdutosSelecionados = listaProdutosSelecionados;
	}

	public List<ServicoProduto> getListaServicoProdutoSelecionados() {
		return listaServicoProdutoSelecionados;
	}

	public void setListaServicoProdutoSelecionados(
			List<ServicoProduto> listaServicoProdutoSelecionados) {
		this.listaServicoProdutoSelecionados = listaServicoProdutoSelecionados;
	}	
	
}
